package calpi.gui;

import calpi.Connectors;
import calpi.Curso;
import calpi.Disciplina;
import calpi.database.CursosConnector;
import calpi.database.DisciplinasConnector;
import javax.swing.JDialog;
import static javax.swing.JOptionPane.*;

public class TwoFaceFrameCadas extends javax.swing.JInternalFrame {

    //Janela tipo disciplina
    public final static byte DISCIPLINA = 2;

    //Janela tipo curso
    public final static byte CURSO = 1;

    private byte tipo = 0;
    //Guarda a referência da haver a substituição
    private Object editar = null;

    public TwoFaceFrameCadas(byte tipo) {

        this(null, tipo);
    }
    /** Creates new form TwoFaceFrameCadas */
    public TwoFaceFrameCadas(Object editar, byte tipo) {


        if ((tipo != CURSO) && (tipo != DISCIPLINA)) {

            throw new IllegalArgumentException("Tipo da janela é inválido");
        }

        initComponents();
        this.tipo = tipo;
        if (editar != null) {

            if ((tipo == CURSO && !(editar instanceof Curso))
                    || (tipo == DISCIPLINA && !(editar instanceof Disciplina))) {

                    throw new IllegalArgumentException("Tipo do objeto é inválido");
            }

            this.editar = editar;
            jTextField1.setText(
                                 tipo == CURSO
                                 ? String.valueOf(((Curso) editar).getId())
                                 : String.valueOf(((Disciplina) editar)
                                                        .getCodigo())
                                );
            jTextField2.setText(
                                 tipo == CURSO
                                 ? ((Curso) editar).getNome()
                                 : ((Disciplina) editar).getDescricao()
                                );
        }

        jLabel1.setText(tipo == CURSO
                        ? "Código do curso:"
                        : "Código da disciplina");
        jLabel2.setText(tipo == CURSO
                        ? "Nome do curso:"
                        : "Nome da disciplina");
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        confirmar = new javax.swing.JButton();
        cancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("CalpI - Cadastro de Alunos");

        jPanel1.setLayout(new java.awt.GridLayout(3, 2));

        jLabel1.setText("jLabel1");
        jPanel1.add(jLabel1);
        jPanel1.add(jTextField1);

        jLabel2.setText("jLabel2");
        jPanel1.add(jLabel2);
        jPanel1.add(jTextField2);

        confirmar.setText("Confirmar");
        confirmar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                confirmarActionPerformed(evt);
            }
        });
        jPanel1.add(confirmar);

        cancelar.setText("Cancelar");
        cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelarActionPerformed(evt);
            }
        });
        jPanel1.add(cancelar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void cancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelarActionPerformed

        //Get o top-level na hieraquia dos containers
        JDialog _top =  (JDialog) getTopLevelAncestor();
        setVisible(false);
        dispose();
        _top.setVisible(false);
       _top.dispose();
    }//GEN-LAST:event_cancelarActionPerformed

    private void confirmarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_confirmarActionPerformed

        int cod = 0;
        boolean error = false;
        try {
        
            cod = Integer.parseInt(jTextField1.getText());
        } catch (NumberFormatException nfe) {

            showMessageDialog(this,
                                (tipo == CURSO
                                ? "Código do curso inválido"
                                : "Código da disciplina inválido"),
                                "CalpI - Cadastro de Alunos", ERROR_MESSAGE);
            error = true;
        }

        String info2 = jTextField2.getText();
        if (info2.equals("")) {

            showMessageDialog(this,
                                (tipo == CURSO
                                ? "Digite um nome para o curso"
                                : "Digite o nome da disciplina"),
                                "CalpI - Cadastro de Alunos", ERROR_MESSAGE);
            error = true;
        }

        if (error) {

            return;
        }

        //Procura se há algum cadastro com o mesmo código
        if (tipo == CURSO) {

            CursosConnector cc = (CursosConnector) Connectors
                    .getConnector(Connectors.CURSOS);

            if (editar == null) {
                
                cc.setIterableBuffer(CursosConnector.BUFFER_OUT);
                for (Curso c : cc) {

                    if (c.getId() == cod) {

                        showMessageDialog(this, "Código de curso já existente",
                                "CalpI - Cadastro de Alunos", ERROR_MESSAGE);
                        return;
                    }
                }

                cc.addElementBufferOut(new Curso(cod, info2));
                Connectors.askWrite(Connectors.CURSOS);
                showMessageDialog(this, "Curso cadastrado com sucesso",
                                "CalpI - Cadastro de Alunos", INFORMATION_MESSAGE);
                
            } else {

                cc.removeElementBufferOut((Curso) editar);
                cc.addElementBufferOut(new Curso(cod, info2));
                Connectors.askWrite(Connectors.CURSOS);
                showMessageDialog(this, "Curso modificado com sucesso",
                                "CalpI - Cadastro de Alunos", INFORMATION_MESSAGE);                
                editar = null;
            }
        } else {

            DisciplinasConnector dc = (DisciplinasConnector) Connectors
                    .getConnector(Connectors.DISCIPLINAS);

            if (editar == null) {
            
                dc.setIterableBuffer(CursosConnector.BUFFER_OUT);
                for (Disciplina d : dc) {

                    if (d.getCodigo() == cod) {

                        showMessageDialog(this, "Código de disciplinas já existente",
                                "CalpI - Cadastro de Alunos", ERROR_MESSAGE);
                        return;
                    }
                }

                dc.addElementBufferOut(new Disciplina(cod, info2));
                showMessageDialog(this, "Disciplina cadastrada com sucesso",
                                "CalpI - Cadastro de Alunos", INFORMATION_MESSAGE);
                Connectors.askWrite(Connectors.DISCIPLINAS);
            } else {

                dc.removeElementBufferOut((Disciplina) editar);
                dc.addElementBufferOut(new Disciplina(cod, info2));
                showMessageDialog(this, "Disciplina modificada com sucesso",
                                "CalpI - Cadastro de Alunos", INFORMATION_MESSAGE);
                Connectors.askWrite(Connectors.DISCIPLINAS);
                editar = null;
            }
        }

        jTextField1.setText("");
        jTextField2.setText("");
    }//GEN-LAST:event_confirmarActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton cancelar;
    private javax.swing.JButton confirmar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration//GEN-END:variables

}
